iconhelper: Finish gadget conversion
authorBenjamin Otte <otte@redhat.com>
Mon, 14 Dec 2015 03:00:31 +0000 (04:00 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 15 Dec 2015 13:41:16 +0000 (08:41 -0500)
Implement missing vfuncs

gtk/gtkiconhelper.c
gtk/gtkiconhelperprivate.h

index bc82ee0a439a1b50b9e17a8c662a6ca6b77870b9..deac87c6610450605c8d31ebb043ebd7542b28a3 100644 (file)
@@ -83,6 +83,60 @@ _gtk_icon_helper_clear (GtkIconHelper *self)
   self->priv->icon_size = GTK_ICON_SIZE_INVALID;
 }
 
+static void
+gtk_icon_helper_get_preferred_size (GtkCssGadget   *gadget,
+                                    GtkOrientation  orientation,
+                                    gint            for_size,
+                                    gint           *minimum,
+                                    gint           *natural,
+                                    gint           *minimum_baseline,
+                                    gint           *natural_baseline)
+{
+  GtkIconHelper *self = GTK_ICON_HELPER (gadget);
+  int icon_width, icon_height;
+
+  _gtk_icon_helper_get_size (self, &icon_width, &icon_height);
+
+  if (orientation == GTK_ORIENTATION_HORIZONTAL)
+    *minimum = *natural = icon_width;
+  else
+    *minimum = *natural = icon_height;
+
+  if (minimum_baseline)
+    *minimum_baseline = 0;
+  if (natural_baseline)
+    *natural_baseline = 0;
+}
+
+static void
+gtk_icon_helper_allocate (GtkCssGadget        *gadget,
+                          const GtkAllocation *allocation,
+                          int                  baseline,
+                          GtkAllocation       *out_clip)
+{
+  GTK_CSS_GADGET_CLASS (gtk_icon_helper_parent_class)->allocate (gadget, allocation, baseline, out_clip);
+}
+
+static gboolean
+gtk_icon_helper_draw (GtkCssGadget *gadget,
+                      cairo_t      *cr,
+                      int           x,
+                      int           y,
+                      int           width,
+                      int           height)
+{
+  GtkIconHelper *self = GTK_ICON_HELPER (gadget);
+  int icon_width, icon_height;
+
+  _gtk_icon_helper_get_size (self, &icon_width, &icon_height);
+  _gtk_icon_helper_draw (self,
+                         cr,
+                         x + (width - icon_width) / 2,
+                         y + (height - icon_height) / 2);
+
+  return FALSE;
+}
+
 static void
 gtk_icon_helper_style_changed (GtkCssGadget      *gadget,
                                GtkCssStyleChange *change)
@@ -128,6 +182,9 @@ gtk_icon_helper_class_init (GtkIconHelperClass *klass)
   GtkCssGadgetClass *gadget_class = GTK_CSS_GADGET_CLASS (klass);
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
   
+  gadget_class->get_preferred_size = gtk_icon_helper_get_preferred_size;
+  gadget_class->allocate = gtk_icon_helper_allocate;
+  gadget_class->draw = gtk_icon_helper_draw;
   gadget_class->style_changed = gtk_icon_helper_style_changed;
 
   object_class->constructed = gtk_icon_helper_constructed;
@@ -783,6 +840,26 @@ gtk_icon_helper_new (GtkCssNode *node,
                        NULL);
 }
 
+GtkCssGadget *
+gtk_icon_helper_new_named (const char *name,
+                           GtkWidget  *owner)
+{
+  GtkIconHelper *result;
+  GtkCssNode *node;
+
+  g_return_val_if_fail (name != NULL, NULL);
+  g_return_val_if_fail (GTK_IS_WIDGET (owner), NULL);
+
+  node = gtk_css_node_new ();
+  gtk_css_node_set_name (node, g_intern_string (name));
+
+  result = gtk_icon_helper_new (node, owner);
+
+  g_object_unref (node);
+
+  return GTK_CSS_GADGET (result);
+}
+
 void
 _gtk_icon_helper_draw (GtkIconHelper *self,
                        cairo_t *cr,
index fc3acf0c7b94fed36b5480b9d3e20a3fd1fbc46f..291fb40e165332769883a3bdd42544acfd885f4f 100644 (file)
@@ -70,6 +70,8 @@ GType gtk_icon_helper_get_type (void) G_GNUC_CONST;
 
 GtkIconHelper *gtk_icon_helper_new (GtkCssNode *node,
                                     GtkWidget  *owner);
+GtkCssGadget *gtk_icon_helper_new_named (const char *name,
+                                          GtkWidget  *owner);
 
 void _gtk_icon_helper_clear (GtkIconHelper *self);